数组字典 |
您所在的位置:网站首页 › 数组 字典 列表 › 数组字典 |
![]() 大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法。大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的内容。大家已经注意到了,字典的应用和数组是密不可分的。要想理解字典的应用,必须要掌握数组的用法,对于数组的理解要透彻后才能谈到字典的理解,字典本身其实非常的简单,就是要灵活的利用他的键和键值。 我们今日的内容是实现双条件的数据汇总,如下的数据,我们要根据A列和B列的值对C列数据实现汇总求和: ![]() 怎么能做到呢?我刚才讲过,对于字典的本身定义非常的简单,要深入的理解键和键值,巧妙的应用。下面看我给出的代码: Sub mynzsz_39() '39 利用数组与字典,实现双条件数据汇总的方法 Dim myarr Sheets('39').Select '将数据装入数组 myarr = Range('a2:c' & Range('c2').End(xlDown).row) Set myDic = CreateObject('Scripting.Dictionary') For i = 1 To UBound(myarr, 1) '利用'丨'将数组的第一第二列合并,以利用查询 mykey = myarr(i, 1) & '丨' & myarr(i, 2) '如果存在,合并值,如果不存在建立新的 If Not myDic.exists(mykey) Then myDic(mykey) = myarr(i, 3) Else myDic(mykey) = myDic(mykey) myarr(i, 3) End If Next Range('g1:I1') = Array('型号', '类别', '数量') '提取键数组,这个时候的元素是用'丨'隔开的,用replace分别替换掉左右的字符 myarr1 = Array(myDic.Keys) Range('g2').Resize(myDic.Count, 2) = Application.Transpose(myarr1) Range('g2').Resize(myDic.Count, 1).Replace '丨*', '', xlPart Range('h2').Resize(myDic.Count, 1).Replace '*丨', '', xlPart '提取键值数组 myarr2 = Array(myDic.items) Range('I2').Resize(myDic.Count, 1) = Application.Transpose(myarr2) End Sub 代码截图: ![]() 代码讲解: 1 上述代码实现了根据数据的A列和B列进行汇总求和的功能,实现类似的办法可以用以前我讲过的方法代码循环,还可以用数据库,大家可以试着比较一下。 2 '将数据装入数组 myarr = Range('a2:c' & Range('c2').End(xlDown).row) 上述代码实现将数据装入数组,以利用后续的操作。 3 mykey = myarr(i, 1) & '丨' & myarr(i, 2) 上述代码将数组的第一个元素和第二个元素合并,作为一个键,然后赋值 4 '如果存在,合并值,如果不存在建立新的 If Not myDic.exists(mykey) Then myDic(mykey) = myarr(i, 3) Else myDic(mykey) = myDic(mykey) myarr(i, 3) End If 记住,上面的代码是判断键存在与否的标准语句,大家要利用好,这也是一个标准的写法。 5 myarr1 = Array(myDic.Keys) Range('g2').Resize(myDic.Count, 2) = Application.Transpose(myarr1) 将键组成的数组回填给单元格,注意这里回填的是两列,下面还有对这两列分别处理 6 Range('g2').Resize(myDic.Count, 1).Replace '丨*', '', xlPart 上述语句去右留左。 Range('h2').Resize(myDic.Count, 1).Replace '*丨', '', xlPart 上述语句去左留右。 上述代码也可以作为标准的语句进行写法的记忆。 下面看代码的运行: ![]() 今日内容回向: 1 如何实现双列的数据汇总? 2 在字典中双列的汇总最关键的步骤是什么? |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |